// 服务端提供的私钥 是通过base64编码的字符串 
// 服务端提供的加密后的密文是base64编码的字符串

// 第一步：base64解码
import { Buffer } from 'buffer'
import JSEncrypt from 'jsencrypt';
// base64String:base64 编码后的字符串
export function decodeBase64Node(base64String: string): Buffer {
    return Buffer.from(base64String, 'base64');
}


// 从PKCS#8 DER格式导入RSA私钥
// @param keyBytes PKCS#8 DER格式的私钥字节数组
// @returns Promise<CryptoKey> RSA私钥
// 通过此方法获取私钥对象  
export async function importRSAPrivateKeyFromPKCS8(keyBytes: ArrayBuffer | Uint8Array): Promise<CryptoKey> {
    // 如果传入的是Uint8Array，转换为ArrayBuffer
    const keyBuffer = keyBytes instanceof Uint8Array ? keyBytes.buffer : keyBytes;
    return await window.crypto.subtle.importKey(
        "pkcs8",
        keyBuffer,
        {
            name: "RSA-PSS", // 或 "RSA-OAEP" 取决于你的用途
            hash: { name: "SHA-256" } // 指定哈希算法
        },
        true, // 是否可导出
        ["decrypt", "sign"] // 密钥用途
    );
}



// 从后端获取公钥
async function getPublicKey() {
    const response = await fetch('/api/publicKey');
    return await response.text();
}

// 解密函数
async function decryptData(privateKeyData,encryptedData) {
    const privateKey = '这里填入前端的私钥'; // 注意：前端通常不应该有私钥！
    const decrypt = new JSEncrypt();
    decrypt.setPrivateKey(privateKey);
    
    const decrypted = decrypt.decrypt(encryptedData);
    if (!decrypted) {
        throw new Error('解密失败');
    }
    return decrypted;
}





export default {
    decodeBase64Node,//base64解码
    importRSAPrivateKeyFromPKCS8, //
}